#pragma once

#include <typedef.h>

typedef enum MISSION_STATE_E
{
	MIS_STATE_RUNNING = 0, // 运行
	MIS_STATE_PAUSE,	   // 暂停
	MIS_STATE_FINISHED,	   // 完成
	MIS_STATE_TIMEOUT,	   // 超时
	MIS_STATE_ABORTED,	   // 中止（异常）
} MISSION_STATE_E;

// 任务超时选项
typedef enum MISSION_TIMEOUT_TYPE_E
{
	MIS_STOP_ALL = 0, // 中止整个队列
	MIS_STOP_CURRENT, // 中止当前任务并进行下一个任务

} MISSION_TIMEOUT_TYPE_E;

class MissionRun;

class Mission
{
public:
	Mission(int timeoutMs	 = 0,		// 超时毫秒
			int timeoutOpt	 = 0,		// 超时选项（MISSION_TIMEOUT_TYPE_E）
			void* argNormal	 = nullptr, // 正常运行参数
			void* argStopped = nullptr, // 完成停止参数
			void* argTimeout = nullptr, // 超时参数
			int userData	 = 0,		// 用户自定义参数
			void* userDataP	 = nullptr); // 用户自定义参数指针

	virtual ~Mission();

	void Finish(void);
	void Timeout(void);
	void Abort(void);

	virtual void RunImplNormal(void* arg)  = 0;
	virtual void RunImplStopped(void* arg) = 0;
	virtual void RunImplTimeout(void* arg) = 0;

	friend class MissionRun;

protected:
	int m_State;
	int m_TimeoutMs;
	int m_TimeoutOpt;
	void* m_ArgNormal;
	void* m_ArgStopped;
	void* m_ArgTimeout;
	int m_UserData;
	void* m_UserDataP;
};